package main

import (
	"fmt"
	"strings"
)

/**
切片的方法
*/
func main() {
	//若有一个字符串aaabcabdcdsasfasfasfbbghjtttwwr，找出其中某段无重复字符最长的字符串？
	// 找出最长的无重复字符串 最长 滑块从第1位开始匹配，不重复则增加滑块长度，不需要考虑长度比前一个小的串
	// 重复情况往滑块往右移一位
	str := "aaabcabdcdsasfasfasfbbghjtttwxr"
	//str := "aaasdfaaadfgaa"
	fmt.Printf("s2：%v\n", str)

	var start, end = 0, 1
	var str2 string //筛选出的字符串
	for end <= len(str) {
		// 定义一个滑块，初始从下标0开始到1结束，后面遇到重复值则在本身的长度下右移1
		var slider = str[start:end]
		//计算重复
		var repeatCount = 1
		for i := 0; i < len(slider); i++ {
			// 用滑块内的字符作为匹配值，匹配滑块中有无重复，遍历滑块内每一个字符，返回重复值都为1，则证明这个滑块没有重复值
			var temp = string(slider[i])
			// 利用内置函数strings.Count查找滑块内有无重复 返回值：返回字符串s1中有几个不重复的temp子串
			repeatCount = strings.Count(slider, temp)
			//repeatCount >1说明有重复的，滑块增加
			if repeatCount > 1 {
				start++
				end = start + len(slider)
				break
			}
		}
		// 滑块中的重复值都为1，则证明这段字符串无重复，覆盖记录，增加滑块长度
		if repeatCount == 1 {
			//增加
			str2 = slider //保存之前的值
			end++
			fmt.Printf("str2：%v\n", str2)
		}
	}
	fmt.Printf("====>%v\n", str2)

	//sds	 := strings.Count("ssffsd","s")
	//fmt.Printf("sds：%v\n", sds)

}
